'use strict';
// 数据加密
const crypto = require('crypto');
const path = require('path');
const Controller = require('egg').Controller;

class FileController extends Controller {
  /**
       *
       * @api {POST} /api/imgUpload 上传图片、文件（需要token）
       * @apiName 上传图片、文件
       * @apiGroup 文件模块
       * @apiVersion  1.0.0
       *
       *
       * @apiParam  {Object} file 文件列表（form-data格式）   (传文件时调用)
       * @apiParam  {Array} baseArr base64文件数组(base64格式) （传base64格式时调用）
       *
       *
       * @apiParamExample  {type} Request-Example:
          [
              File,
              File,
              File
          ]
          或者
      {
          "baseArr":[""]
      }
       *
       *
       * @apiSuccessExample {type} Success-Response:
       * {
       *     msg : "成功操作",
       *     data : {
       *      [                                                                                         //图片地址数组
                  'https://blog-1251395798.cos.ap-guangzhou.myqcloud.com/image/_1629978756129_1.jpeg',
                  'https://blog-1251395798.cos.ap-guangzhou.myqcloud.com/application/_1629978756404_2.pdf',
                  'https://blog-1251395798.cos.ap-guangzhou.myqcloud.com/image/_1629978756482_3.jpg'
              ]
        }
       *
       *
       */
  // 图片上传
  async imgFileUpload() {
    const { ctx } = this;
    this.md5 = crypto.createHash('md5');
    let stream;

    try {
      stream = await ctx.getFileStream();
    } catch (error) {
      ctx.body = ctx.response.error('请上传文件');
    }
    if (!stream) {
      return;
    }
    try {
      // 新建一个文件名
      let userData = (ctx.adminInfo && ctx.adminInfo) || ctx.userInfo;
      /** 生成filename，文件存储目录及格式为 /project_name_用户id/_时间戳_文件名 */
      let filename =
        `/${userData.id}/_${+new Date()}_` +
        this.md5.update(stream.filename).digest('hex') +
        path.extname(stream.filename).toLocaleLowerCase();
      const cosData = await ctx.helper._upload(filename, stream);
      // 保存到数据库 返回上传的信息
      ctx.body = {
        path: cosData,
      };
    } catch (error) {
      console.log(error);
    }
  }
}
module.exports = FileController;
